﻿using System;
using System.Windows.Forms;
using Sheeter.Library.Model;
using DevExpress.XtraEditors;
using System.Xml.Serialization;
using System.IO;
using Sheeter.Library.Reports;

namespace Sheeter.App
{
    public partial class FrmMain : Form
    {
        readonly UscMac uscMac = new UscMac();
        int total;
        public static XMLInfo xmlInfo = null;
        //
        public FrmMain()
        {
            InitializeComponent();
        }

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
        }

        private void magoACruzadaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
        }

        private void btnFechar_Click(object sender, EventArgs e)
        {
            pnlConteudo.Controls.Clear();
        }

        private void pnlConteudo_ControlAdded(object sender, ControlEventArgs e)
        {
            toolStrip1.Items["btnSalvar"].Enabled = pnlConteudo.Controls.Contains(uscMac);
            toolStrip1.Items["btnLimpar"].Enabled = pnlConteudo.Controls.Contains(uscMac);
            toolStrip1.Items["btnFechar"].Enabled = pnlConteudo.Controls.Count > 0;
        }

        private void pnlConteudo_ControlRemoved(object sender, ControlEventArgs e)
        {
            toolStrip1.Items["btnSalvar"].Enabled = pnlConteudo.Controls.Contains(uscMac);
            toolStrip1.Items["btnLimpar"].Enabled = pnlConteudo.Controls.Contains(uscMac);
            toolStrip1.Items["btnFechar"].Enabled = pnlConteudo.Controls.Count > 0;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            var arquivo = String.Empty;
            var diretorio = "fichas\\";
            if (!Directory.Exists(diretorio))
                Directory.CreateDirectory(diretorio);

            using (FrmNomeArquivo frmNomeArquivo = new FrmNomeArquivo())
            {
                if (frmNomeArquivo.ShowDialog() == DialogResult.OK)
                {
                    if (String.IsNullOrEmpty(frmNomeArquivo.txtNomeArquivo.Text))
                        arquivo = String.Format(@"{0}ficha{1}{2}{3}{4}{5}{6}.xml", diretorio,
                            DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year,
                            DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
                    else
                        arquivo = String.Format("{0}{1}.xml", diretorio, frmNomeArquivo.txtNomeArquivo.Text);
                    //
                    if (pnlConteudo.Controls.Count > 0)
                    {
                        if (pnlConteudo.Controls.Contains(uscMac))
                        {
                            ValorInfoBasica(xmlInfo);
                            ValorAtributos(xmlInfo);
                            ValorHabilidades(xmlInfo);
                            ValorEsferas(xmlInfo);
                            ValorAntecedentes(xmlInfo);
                            ValorOutrasHabilidades(xmlInfo);
                            ValorVantagens(xmlInfo);

                            XmlSerializer serializer = new XmlSerializer(typeof(XMLInfo));

                            using (TextWriter textWriter = new StreamWriter(arquivo))
                            {
                                try
                                {
                                    serializer.Serialize(textWriter, xmlInfo);
                                    textWriter.Close();
                                }
                                catch (Exception ex)
                                {
                                    throw new ArgumentException(String.Format("Não foi possível gravar a ficha! Erro: {0}", ex.Message));
                                }
                            }
                        }
                    }
                }
            }

            
        }

        private void ValorVantagens(XMLInfo xmlInfo)
        {
            xmlInfo.Arete = Convert.ToInt32(uscMac.uscBase.nvlArete.Text);
            xmlInfo.ForcaDeVontade = Convert.ToInt32(uscMac.uscBase.nvlForcaVontade.Text);
            xmlInfo.ForcaDeVontadeFixo = Convert.ToInt32(uscMac.uscBase.nvlForcaVontadeFixo.Text);
            xmlInfo.Quintessencia = Convert.ToInt32(uscMac.uscBase.nvlQuintessencia.Text);
            xmlInfo.Castigo = Convert.ToInt32(uscMac.uscBase.nvlCastigo.Text);

            total = 0;
            foreach (Control ctr in uscMac.uscBase.grpVitalidade.Controls)
            {
                if (ctr.GetType().Equals(typeof(CheckBox)))
                {
                    if ((ctr as CheckBox).Checked)
                        total++;
                }
            }
            if (total > 0)
            {
                XMLInfo.Danos danos = new XMLInfo.Danos { Dano = total, Tipo = "Letal" };
                xmlInfo.Vitalidade = danos;
            }

            xmlInfo.Experiencia = String.IsNullOrEmpty(uscMac.uscBase.txtExperiencia.Text) ? 0 : Int32.Parse(uscMac.uscBase.txtExperiencia.Text);
            xmlInfo.Anotacoes = uscMac.uscBase.txtAnotacoes.Text;
        }

        private void ValorOutrasHabilidades(XMLInfo xmlInfo)
        {
            foreach (NivelOutrasHabilidadesInfo ohs in uscMac.uscBase.uscOutrasHabilidadesMac.nivelOutrasHabilidadesInfoBindingSource)
            {
                xmlInfo.OutrasHabilidades.Add(ohs);
            }
        }

        private void ValorAntecedentes(XMLInfo xmlInfo)
        {
            foreach (NivelAntecedentesInfo ans in uscMac.uscBase.uscAntecedentes.nivelAntecedentesInfoBindingSource)
            {
                xmlInfo.Antecedentes.Add(ans);
            }
        }

        private void ValorEsferas(XMLInfo xmlInfo)
        {
            xmlInfo.Conexao = Convert.ToInt32(uscMac.uscBase.nvlConexao.Value);
            xmlInfo.Entropia = Convert.ToInt32(uscMac.uscBase.nvlEntropia.Value);
            xmlInfo.Forcas = Convert.ToInt32(uscMac.uscBase.nvlForcas.Value);
            xmlInfo.Espirito = Convert.ToInt32(uscMac.uscBase.nvlEspirito.Value);
            xmlInfo.Materia = Convert.ToInt32(uscMac.uscBase.nvlMateria.Value);
            xmlInfo.Mente = Convert.ToInt32(uscMac.uscBase.nvlMente.Value);
            xmlInfo.Tempo = Convert.ToInt32(uscMac.uscBase.nvlTempo.Value);
            xmlInfo.Primordio = Convert.ToInt32(uscMac.uscBase.nvlPrimordio.Value);
            xmlInfo.Vida = Convert.ToInt32(uscMac.uscBase.nvlVida.Value);
        }

        private void ValorInfoBasica(XMLInfo xmlInfo)
        {
            xmlInfo.Nome = uscMac.uscBase.txtNome.Text;
            xmlInfo.Jogador = uscMac.uscBase.txtJogador.Text;
            xmlInfo.Cronica = uscMac.uscBase.txtCronica.Text;
            xmlInfo.Natureza = uscMac.uscBase.txtNatureza.Text;
            xmlInfo.Essencia = uscMac.uscBase.txtMiddle.Text;
            xmlInfo.Comportamento = uscMac.uscBase.txtComportamento.Text;
            xmlInfo.Conceito = uscMac.uscBase.txtConceito.Text;
            xmlInfo.Afiliacao = uscMac.uscBase.txtRight.Text;
            xmlInfo.Cabala = uscMac.uscBase.txtBotttom.Text;
        }

        private void ValorHabilidades(XMLInfo xmlInfo)
        {
            #region Talentos
            xmlInfo.Prontidao = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlProntidao.Value);
            xmlInfo.Artista = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlArtista.Value);
            xmlInfo.Esportes = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlEsportes.Value);
            xmlInfo.Consciencia = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlConsciencia.Value);
            xmlInfo.Briga = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlBriga.Value);
            xmlInfo.Esquiva = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlEsquiva.Value);
            xmlInfo.Expressao = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlExpressao.Value);
            xmlInfo.Instrucao = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlInstrucao.Value);
            xmlInfo.Intimidacao = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlIntimidacao.Value);
            xmlInfo.Crime = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlCrime.Value);
            xmlInfo.Labia = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlLabia.Value);
            #endregion

            #region Perícia
            xmlInfo.EmpatiaComAnimais = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlEmpatiaAnimais.Value);
            xmlInfo.Arqueirismo = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlArqueirismo.Value);
            xmlInfo.Oficios = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlOficios.Value);
            xmlInfo.Etiqueta = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlEtiqueta.Value);
            xmlInfo.Lideranca = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlLideranca.Value);
            xmlInfo.Meditacao = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlMeditacao.Value);
            xmlInfo.ArmasBrancas = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlArmasBrancas.Value);
            xmlInfo.Pesquisa = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlPesquisa.Value);
            xmlInfo.Cavalgar = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlCavalgar.Value);
            #endregion

            #region Conhecimentos
            xmlInfo.Academicos = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlAcademicos.Value);
            xmlInfo.AspectosCulturais = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlAspectosCulturais.Value);
            xmlInfo.Enigmas = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlEnigmas.Value);
            xmlInfo.Investigacao = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlInvestigacao.Value);
            xmlInfo.Direito = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlDireito.Value);
            xmlInfo.Linguistica = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlLinguistica.Value);
            xmlInfo.Cultura = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlCultura.Value);
            xmlInfo.Medicina = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlMedicina.Value);
            xmlInfo.Metafisica = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlMetafisica.Value);
            xmlInfo.Ocultismo = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlOcultismo.Value);
            xmlInfo.Ciencia = Convert.ToInt32(uscMac.uscBase.uscHabilidadesMac.nvlCiencia.Value);
            #endregion
        }

        private void ValorAtributos(XMLInfo xmlInfo)
        {
            #region Físicos
            xmlInfo.Forca = Convert.ToInt32(uscMac.uscBase.nvlForca.Value);
            xmlInfo.Destreza = Convert.ToInt32(uscMac.uscBase.nvlDestreza.Value);
            xmlInfo.Vigor = Convert.ToInt32(uscMac.uscBase.nvlVigor.Value);
            #endregion

            #region Sociais

            xmlInfo.Aparencia = Convert.ToInt32(uscMac.uscBase.nvlAparencia.Value);
            xmlInfo.Manipulacao = Convert.ToInt32(uscMac.uscBase.nvlManipulacao.Value);
            xmlInfo.Carisma = Convert.ToInt32(uscMac.uscBase.nvlCarisma.Value);
            #endregion

            #region Mentais
            xmlInfo.Inteligencia = Convert.ToInt32(uscMac.uscBase.nvlInteligencia.Value);
            xmlInfo.Raciocinio = Convert.ToInt32(uscMac.uscBase.nvlRaciocinio.Value);
            xmlInfo.Percepcao = Convert.ToInt32(uscMac.uscBase.nvlPercepcao.Value);
            #endregion
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            if (pnlConteudo.Controls.Count > 0)
            {
                if (pnlConteudo.Controls.Contains(uscMac))
                {
                    if (xmlInfo != null)
                    {
                        RptMac rptMac = new RptMac(xmlInfo);
                        rptMac.ShowPreviewDialog();
                    }
                    else
                        MessageBox.Show("Preencha alguma informação!", "Imprimir", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                UscImprimir uscImprimir = new UscImprimir();
                pnlConteudo.Controls.Add(uscImprimir);
            }
        }

        private void magoACruzadaDosFeiticeirosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pnlConteudo.Controls.Add(uscMac);
            xmlInfo = new XMLInfo() { Sistema = "MAC" };
        }

        private void sairToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            Close();
        }
    }
}
